package root.repositorios;

import java.util.ArrayList;
import java.util.List;

import root.plumbum2.Topico;

/**
 * 
 * Classe que representa um repositorio de Topicos.
 * 
 */
public class RepositorioTopicos implements RepositorioInterface<Topico> {

	List<Topico> listaMensagem = new ArrayList<Topico>();

	@Override
	/**
	 * Insere um topico no repositorio.
	 */
	public void insert(Topico msg) {
		listaMensagem.add(0, msg);
	}

	@Override
	/**
	 * Remove um topico do repositorio.
	 */
	public void remove(Topico msg) {
		listaMensagem.remove(msg);
	}

	@Override
	/**
	 * Pesquisa um topico no repositorio
	 * @param Topico a ser procurado.
	 * @return Topico, ou null se nao foi encontrado.
	 */
	public Topico search(Topico o) {
		return null;
	}

	@Override
	/**
	 * Retorna um lista contendo todos os topicos do repositorio.
	 * 
	 */
	public List<Topico> getRepositorio() {
		return this.listaMensagem;
	}

	/**
	 * Ler os topicos do repositorio e retorna uma lista de referencia com seus
	 * assuntos.
	 * 
	 * @param tipo
	 *            Tipo topico a ser lido.
	 * @return String com os assuntos de todos os topicos.
	 */
	public String lerTopicos(String tipo) {
		String retorno = "";
		for (Topico m : listaMensagem) {
			if (tipo.equals("todos")) {
				retorno += m.getAssunto() + "; ";
			} else {
				if (m.getTipo().equals(tipo)) {
					retorno += m.getAssunto() + "; ";
				}
			}
		}
		return retorno.length() > 0 ? retorno
				.substring(0, retorno.length() - 2) : "Não há tópicos criados";
	}

	/**
	 * Procura um topico especifico pelo seu id.
	 * 
	 * @param idTopic
	 *            Id do topico a ser procurado.
	 * @return Topico, ou null o topico nao foi encontrado.
	 * @throws Exception
	 */
	public Topico searchMensagem(String idTopic) throws Exception {
		Topico mensagem = null;
		for (Topico msg : listaMensagem) {
			if (msg.getIdTopic().equals(idTopic)) {
				mensagem = msg;
			}
		}
		return mensagem;
	}

	/**
	 * Ler topicos de um determinado assunto.
	 * 
	 * @param assunto
	 *            Assunto a ser pesquisado nos topicos.
	 * @return Topico com o assunto passado, ou null caso nao encontre.
	 */
	public Topico lerTopicosPorAssunto(String assunto) {
		Topico topico = null;
		for (Topico tpc : listaMensagem) {
			if (tpc.getAssunto().equals(assunto)) {
				topico = tpc;
			}
		}
		return topico;
	}

}
